package jp.oesf.httpsample;

import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class HttpSample extends Activity {
	private static final String TAG = "HttpClientSample";
	// 接続先URL
	private static final String URL = "http://www.oesf.jp/"; // ネットワーク接続可
	// private static final String URL = "http://[PCのIPアドレス]:8080/oesf.html"; //ネットワーク接続不可

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	public void onClickButton(View v) {
		// TODO 【HTTP通信①】No.01 DefaultHttpClientオブジェクトの生成する
		DefaultHttpClient client = new DefaultHttpClient();
		// TODO 【HTTP通信①】No.02 GETメソッドで接続するリクエストオブジェクトの生成する
		HttpGet get = new HttpGet(URL);

		try {
			// TODO 【HTTP通信①】No.03 リクエストを発行してレスポンスを取得する
			HttpResponse res = client.execute(get);
			// TODO 【HTTP通信①】No.04 ステータスコードのチェックする
			if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				// TODO 【HTTP通信①】No.05 ログを出力する
				Log.v(TAG, "status ok");

				// TODO 【HTTP通信②】 No.01 下記コメントアウト解除
				String content = getContents(res);

				// TODO 【HTTP通信②】 No.05 TextViewに取得したコンテンツデータを表示
				TextView text = (TextView) findViewById(R.id.text_content);
				text.setText(content);

				// File出力
				writeFile(content);
				writeFileSdcard(content);
			}
		} catch (Exception e) {
			Log.e(TAG, Log.getStackTraceString(e));
		}
	}
	
	private void writeFile(String str) throws Exception{
		OutputStream output = openFileOutput("http", Context.MODE_WORLD_READABLE);
		PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));
		writer.append(str);
		writer.close();
		
	}
	
	private void writeFileSdcard(String str) throws Exception{
		String filePath = Environment.getExternalStorageDirectory() + "/memo.txt";
        File file = new File(filePath);
        file.getParentFile().mkdir();
 
        FileOutputStream fos;
            fos = new FileOutputStream(file, true);
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write(str);
            bw.flush();
            bw.close();
	}

	private String getContents(HttpResponse res) {

		InputStream in = null;
		ByteArrayOutputStream out = null;
		// 一度に読み込むサイズ
		byte[] line = new byte[1024];
		String data = null;
		int size = 0;

		try {
			// TODO 【HTTP通信②】 No.02 レスポンスからInputStreamを取得する
			in = res.getEntity().getContent();
			out = new ByteArrayOutputStream();

			// TODO 【HTTP通信②】 No.03 HTTPレスポンスデータを読み込む
			while (true) {
				size = in.read(line);
				if (size <= 0) {
					break;
				}
				out.write(line, 0, size);
			}

			// TODO 【HTTP通信②】 No.04 バイト配列を文字列に変換する
			data = new String(out.toByteArray(), "EUC-JP");

		} catch (Exception e) {
			Log.e(TAG, Log.getStackTraceString(e));
		} finally {
			try {
				if (in != null) {
					in.close();
				}
				if (out != null) {
					out.close();
				}
			} catch (Exception e) {
				Log.e(TAG, Log.getStackTraceString(e));
			}
		}
		return data;
	}
}